#ifndef LOG_H
#define LOG_H

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/text_file_backend.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/utility/setup/console.hpp>

#include <iostream>

class ParallelMPI;

namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;

namespace logging=boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;
namespace expr = boost::log::expressions;

#define log_trace   BOOST_LOG_TRIVIAL(trace)
#define log_debug   BOOST_LOG_TRIVIAL(debug)
#define log_info    BOOST_LOG_TRIVIAL(info)
#define log_warning BOOST_LOG_TRIVIAL(warning)
#define log_error   BOOST_LOG_TRIVIAL(error)
#define log_fatal   BOOST_LOG_TRIVIAL(fatal)

#define log_title(...) {log_info<<std::endl; log_info<<__VA_ARGS__; log_info<<"--------------------------------------------------";}


class Log
{
public:
    Log(ParallelMPI* pmpi);
};

#endif // LOG_H
